Skip to content

Expose CTWA referral metadata on message webhooks#93

Open
juliomuhlbauer wants to merge 5 commits into
evolution-foundation:developfrom
juliomuhlbauer:codex/ctwa-referral-webhooks
Open

Expose CTWA referral metadata on message webhooks#93
juliomuhlbauer wants to merge 5 commits into
evolution-foundation:developfrom
juliomuhlbauer:codex/ctwa-referral-webhooks

Conversation

@juliomuhlbauer

@juliomuhlbauer juliomuhlbauer commented Jun 26, 2026

Copy link
Copy Markdown

Summary

  • expose raw CTWA / ad referral metadata as a top-level field on inbound message webhooks
  • persist the referral JSON on inbound message records without letting later read/delivered receipts wipe it out
  • add focused tests for referral extraction and message upsert behavior
  • document the new webhook field in the events system guide

Verification

  • go test ./...

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @juliomuhlbauer, you have reached your weekly rate limit of 500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@NeritonDias

Copy link
Copy Markdown

🔴 👎

A ideia da feature é boa e o diff está limpo (8 arquivos, aditivo, base develop). Mas tem um bug de schema que precisa ser resolvido antes de mergear:

Referral []byte sem gorm:"type:jsonb" — coluna errada no PostgreSQL

O commit 1 trouxe o campo correto:

Referral json.RawMessage `json:"referral,omitempty" gorm:"type:jsonb"`

O commit 3 ("Trim referral feature diff") removeu a anotação GORM e trocou o tipo:

Referral []byte `json:"referral,omitempty"`

Sem gorm:"type:jsonb", o GORM cria (ou espera) uma coluna bytea no PostgreSQL, não jsonb. Os dados entram, mas não são consultáveis com os operadores JSON do Postgres (->, ->>, @>). Voltar para json.RawMessage com gorm:"type:jsonb" resolve.

Outros pontos menores:

  • Bloco buttonClickMap em whatsmeow.go foi realinhado sem relação com a feature (reformatação de código que não foi tocado).
  • O teste de integração do repositório (que validava o comportamento real de upsert preservando o referral) foi removido e substituído por um unit test que só testa o helper messageUpdateColumns — fica sem cobertura do caso central que a feature promete resolver.

Corrige o tipo/tag GORM e a PR fica pronta.

@dpaes

@juliomuhlbauer

Copy link
Copy Markdown
Author

@NeritonDias veja se falta mais alguma coisa

@NeritonDias

Copy link
Copy Markdown

Progresso real no commit 4 — o campo Referral json.RawMessage com gorm:"type:jsonb" foi restaurado corretamente. Mas ainda tem dois pontos que precisam ser ajustados antes de mergear.


1. go-sqlmock marcado como // indirect no go.mod — precisa de go mod tidy

No commit 4, a entrada ficou assim:

github.com/DATA-DOG/go-sqlmock v1.5.2 // indirect

// indirect significa que o pacote não é importado diretamente por nenhum arquivo do módulo — ele é puxado como dependência de outra dependência. Mas go-sqlmock é importado diretamente em pkg/message/repository/message_repository_test.go:

import (
    "github.com/DATA-DOG/go-sqlmock"
    ...
)

Isso indica que go mod tidy não foi rodado antes do commit. O correto seria:

github.com/DATA-DOG/go-sqlmock v1.5.2

(sem // indirect). Roda go mod tidy e commita o resultado — isso ajusta o go.mod e garante que o go.sum está em sincronia com as deps reais.


2. Reformatação cosmética no whatsmeow.go — bloco buttonClickMap

O commit 1 introduziu uma mudança de alinhamento num bloco de código que não tem relação com a feature de referral. O original no repo tem:

"buttonId":     buttonClickData["buttonId"],
"buttonText":   buttonClickData["buttonText"],
"type":         buttonClickData["type"],
"phone":        dataMap["Sender"],
"jid":          dataMap["Sender"],
"pushName":     dataMap["PushName"],
"messageId":    dataMap["ID"],
"chat":         dataMap["Chat"],
"fromMe":       dataMap["FromMe"],
"timestamp":    evt.Info.Timestamp.Unix(),
"extraData":    buttonClickData,

A PR muda para:

"buttonId":   buttonClickData["buttonId"],
"buttonText": buttonClickData["buttonText"],
"type":       buttonClickData["type"],
...

Só removeu os espaços de alinhamento — sem impacto funcional. O problema é o padrão do repo: não mexer em código que não faz parte da feature. Qualquer diff em whatsmeow.go já chama atenção por ser um arquivo central; um diff que inclui ruído cosmético junto torna a revisão mais difícil e pode esconder mudanças reais.

Reverte esse bloco para o alinhamento original.


Com esses dois ajustes a PR fica limpa.

@juliomuhlbauer @dpaes

@juliomuhlbauer

Copy link
Copy Markdown
Author

@NeritonDias feito

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants